package beer.coder.walawala.persist;

import beer.coder.walawala.common.config.ApplicationConfigure;
import beer.coder.walawala.common.config.ItemConfigure;
import beer.coder.walawala.common.config.TabConfigure;
import javafx.stage.Screen;
import org.apache.commons.lang3.StringUtils;

/**
 * 配置文件辅助工具.
 *
 * @author amath0312
 * @version 1.0
 * @date 2019-10-24 22:22
 */
public class ConfigureUtil {

  private ConfigureUtil() {
  }

  /**
   * 用默认值填充应用配置及其分类、项目中的空值（null）
   *
   * @param configure 待填充应用配置
   */
  public static void fillDefaultValues(ApplicationConfigure configure) {
    if (StringUtils.isEmpty(configure.getResourcePath())) {
      configure.setResourcePath(ApplicationConfigure.DEFAULT_RESOURCE_PATH);
    }
    if (configure.getWidth() == null || configure.getWidth() <= 0) {
      configure.setWidth(ApplicationConfigure.DEFAULT_WIDTH);
    }
    if (configure.getHeight() == null || configure.getHeight() <= 0) {
      configure.setHeight(ApplicationConfigure.DEFAULT_HEIGHT);
    }

    if (configure.getStartx() == null || configure.getStartx() < 0) {
      if (ApplicationConfigure.DEFAULT_START_X >= 0) {
        configure.setStartx(ApplicationConfigure.DEFAULT_START_X);
      } else {
        configure
            .setStartx(ApplicationConfigure.DEFAULT_START_X - configure.getWidth() + getPrimaryScreenWidth());
      }
    }

    if (configure.getStarty() == null || configure.getStarty() < 0) {
      configure.setStarty(ApplicationConfigure.DEFAULT_START_Y);
    }

    if (configure.getAfterActionType() == null) {
      configure.setAfterActionType(ApplicationConfigure.DEFAULT_AFTER_ACTION);
    }

    if (configure.getTabs() == null) {
      configure.setTabs(new TabConfigure[0]);
    } else {
      for (TabConfigure tab : configure.getTabs()) {
        fillDefautlTabValues(tab);
      }
    }
  }

  protected static int getPrimaryScreenWidth() {
    return (int) Screen.getPrimary().getVisualBounds().getWidth();
  }

  protected static int getPrimaryScreenHeight() {
    return (int) Screen.getPrimary().getVisualBounds().getHeight();
  }

  /**
   * 用默认值填充分类及其项目中的空值（null）
   *
   * @param tab 待填充类别
   */
  public static void fillDefautlTabValues(TabConfigure tab) {
    if (StringUtils.isEmpty(tab.getName())) {
      tab.setName(TabConfigure.DEFALT_NAME);
    }

    if (StringUtils.isEmpty(tab.getTabStyle())) {
      tab.setTabStyle(TabConfigure.DEFAULT_TAB_STYLE);
    }

    if (StringUtils.isEmpty(tab.getTabSelectedStyle())) {
      tab.setTabSelectedStyle(TabConfigure.DEFAULT_TAB_SELECTED_STYLE);
    }

    if (StringUtils.isEmpty(tab.getContentStyle())) {
      tab.setContentStyle(TabConfigure.DEFAULT_CONTENT_STYLE);
    }

    if (tab.getItems() == null) {
      tab.setItems(new ItemConfigure[0]);
    } else {
      for (ItemConfigure item : tab.getItems()) {
        fillDefaultItemValues(item);
      }
    }
  }

  /**
   * 用默认值填充item中的空值（null）
   *
   * @param item 被填充项目
   */
  public static void fillDefaultItemValues(ItemConfigure item) {
    if (item.getIconType() == null) {
      item.setIconType(ItemConfigure.DEFAULT_ICON_TYPE);
    }
    if (StringUtils.isEmpty(item.getIconPath())) {
      item.setIconPath(ItemConfigure.DEFAULT_ICON_PATH);
    }
    if (item.getItemType() == null) {
      item.setItemType(ItemConfigure.DEFAULT_ITEM_TYPE);
    }

    if (item.getClicked() == null) {
      item.setClicked(Integer.valueOf(0));
    }

    if (item.getLastTime() == null || "".equals(item.getLastTime())) {
      item.setLastTime(ItemConfigure.FIRST_DAY_OF_WA);
    }
  }
}
